import axios from "axios";
import { getTokenName, messageTip, removeToken, messageConfirm } from "../util/util";
import { ElMessage, ElMessageBox } from "element-plus";

// 定义后端接口地址的前缀
axios.defaults.baseURL = 'http://localhost:8089'

export function doGet(url, params) {
  return axios({
    method: 'get',
    url: url,
    params: params,
    dataType: 'json'
  })
}

export function doPost(url, data) {
  return axios({
    method: 'post',
    url: url,
    data: data,
    dataType: 'json'
  })
}

export function doPut(url, data) {
  return axios({
    method: 'put',
    url: url,
    data: data,
    dataType: 'json'
  })
}

export function doDelete(url, params) {
  return axios({
    method: 'delete',
    url: url,
    params: params,
    dataType: 'json'
  })
}

// 添加请求拦截器
axios.interceptors.request.use( (config) => {
  // 在发送请求之前做些什么,在请求头中放一个token(JWT),传给后端接口
  let token = window.sessionStorage.getItem(getTokenName())
  // token不存在
  if (!token) { 
    token = window.localStorage.getItem(getTokenName())
    if (token) {
      config.headers['rememberMe'] = true
    }
  }
  // token存在
  if (token) {
    config.headers['Authorization'] = token
  }

  return config;
},  (error) => {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use( (response) => {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么,拦截token验证的结果,进行相应的提示和页面跳转
  // code > 900表示token验证未通过
  if (response.data.code > 900) {
    // 给前端用户提示,并且跳转页面
    messageConfirm(response.data.msg + ', 是否重新登录?').then(() => {  // 用户点击'确定'按钮就会触发then函数
      // token验证不通过,直接删除token信息
      removeToken()

      // 跳转到登录页
      window.location.href = '/'
    }).catch(() => {  // 用户点击'取消'按钮就会触发then函数
      messageTip('取消去登录', 'warning')
    })
    return
  }
  return response;
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error);
});